package com.example.Accounting14;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/* API 控制器 */
@RestController
@RequestMapping(path = "/api")
public class ApiController {
	@Autowired
	private CashRepository cashRepository;
	@Autowired
	private AccountRepository accountRepository;

	/* 全部数据 cash */
	@GetMapping(path = "/all")
	public @ResponseBody Iterable<Cash> getAllUsers() {
		// @ResponseBody means the returned String is the response, not a view name
		return cashRepository.findAll();
	}

	/* Error 500 */
	/*
	 * @GetMapping(path = "/test") public @ResponseBody Iterable<Cash> getAll() {
	 * return 1 / 0;
	 * 
	 * }
	 */

	/* 返回全部 account 数据 */
	@GetMapping(path = "/acc/get")
	public @ResponseBody Iterable<Account> getAccount() {
		// @ResponseBody means the returned String is the response, not a view name
		return accountRepository.findAll();
	}

	/*
	 * 添加 account 数据，添加失败时（已存在对应账户）失败返回 false, 成功创建新账户时返回true
	 * 例子：http://localhost:8080/api/acc/add?account=anidea&&sum=520.14
	 * 
	 * * 参数： account： string 账户名称（账户号）。 sum： float 金额、余额
	 */
	@GetMapping(path = "/acc/add")
	public @ResponseBody String AddAccount(@RequestParam String account, @RequestParam Float sum) {
		Account acc = accountRepository.findByAccount(account);
		if (acc != null) {
			return "false";
		} else {
			acc = new Account(account, sum);
			accountRepository.save(acc);
			return "true";
		}

	}

	/*
	 * 根据成本表的 id 创建新的收款凭证 如果已经创建过，则不再创建，返回 false。 如果确定是新的成本表，则创建并返回包含新收款凭证id的数据， 如
	 * {'code':0,'msg':'','count':1,'data':[{'id':'11'}]}
	 * 例子：http://localhost:8080/api/cash/add?costid=22&&cost=520.14
	 */
	@GetMapping(path = "/cash/add")
	public String sayHello(@RequestParam Integer costid, @RequestParam Float cost) {
		Cash n1 = cashRepository.findByCostid(costid);
		if (n1 != null) {
			if (n1.getCost() == cost) { // 两项数据吻合：已经存在对应的数据
				return "false";
			} else { // 只有 costid 吻合，数据异常
				return "error: 订单 id 对应的金额不等，请仔细检查";
			}
		} else {
			Cash n = new Cash();
			n.setCostid(costid);
			n.setCost(cost);
			n.setStatus(0);
			cashRepository.save(n);
			return "{'code':0,'msg':'','count':1,'data':[{'id':'" + n.getId() + "'}]}";
		}

	}

	/*
	 * 根据成本表的 id 更新收款凭证中的税费单号、税费。更新失败返回 false。更新成功返回 true。
	 * 
	 * * 参数： costid - 成本表的订单 id. taxid - 该订单对应的税费表id. tax - 税费
	 * 例子：http://localhost:8080/api/cash/update/tax?costid=22&&taxid=52&&tax=13.14
	 */
	@GetMapping(path = "/cash/update/tax")
	public String updatecashtax(@RequestParam Integer costid, @RequestParam Integer taxid, @RequestParam Float tax) {
		Cash n = cashRepository.findByCostid(costid);
		if (n != null) { // 订单存在
			if (n.getTaxid() == null) { // 税费单为空
				n.setTaxid(taxid);
				n.setTax(tax);
				cashRepository.save(n);
				return "true";
			} else { // 税费单不为空，已经存在
				return "false：该订单的税费已经录入";
			}
		} else { // 对应的订单不存在
			return "false";
		}
	}
}